package pe.gob.mef.snip.preinversion.controller;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import pe.gob.mef.snip.preinversion.domain.Alternativa;
import pe.gob.mef.snip.preinversion.domain.ProyectoBanco;
import pe.gob.mef.snip.preinversion.service.AlternativaService;
import pe.gob.mef.snip.preinversion.service.ProyectoBancoService;
import pe.gob.mef.snip.preinversion.util.Parametros;
import pe.gob.mef.snip.preinversion.util.ServiceException;

@Controller
public class AlternativaController {

	protected final Log log = LogFactory.getLog(getClass());
	
	@Autowired
	private AlternativaService alternativaService;
	@Autowired
	private ProyectoBancoService proyectoBancoService;
	
	private Alternativa alternativa;
	private ProyectoBanco proyectoBanco;

	
	@RequestMapping("/alternativaSnip03Listar")
	public ModelAndView alternativaSnip03Listar(HttpServletRequest request, HttpServletResponse response) {
		
		
		if (log.isDebugEnabled()) log.debug("alternativaSnip03Listar(HttpServletRequest,HttpServletResponse");
	    HttpSession session = request.getSession();	
		Map<String, Object> alternativasSnip03Map = new HashMap<String, Object>();
		alternativa = new Alternativa();
		
	    String viewName = "";
		try{
			
				alternativasSnip03Map.put("idProyecto", request.getParameter("idProyecto"));
				alternativasSnip03Map.put("version", Parametros.VERSION_FICHA_1);
						
				viewName = "frmAlternativasSnip03";			

			
			
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		return new ModelAndView(viewName,"alternativasSnip03Map",alternativasSnip03Map);
		
	}
	
	
	@RequestMapping("/alternativaSnip03Grabar")
	public ModelAndView alternativaSnip03Grabar(HttpServletRequest request, HttpServletResponse response) {
		
		if (log.isDebugEnabled()) log.debug("alternativaSnip03Grabar(HttpServletRequest,HttpServletResponse");
	    HttpSession session = request.getSession();	
		Map<String, Object> alternativasSnip03Map = new HashMap<String, Object>();
		
		proyectoBanco = new ProyectoBanco();
	    
		String viewName = "";
	       
		try{				
				alternativasSnip03Map.put("proyecto", request.getParameter("idProyecto"));
				alternativasSnip03Map.put("version", request.getParameter("version"));
				
				alternativa = new Alternativa();
				alternativa.setProyecto(new BigDecimal(request.getParameter("idProyecto")));
				alternativa.setVersion(new BigDecimal(request.getParameter("version")));
				alternativa.setNumAlter(Parametros.ALTERNATIVA_1);
				alternativa.setAlterDesc(request.getParameter("ta_descripAlternativa1"));		
				alternativa.setAlterMontopm(new BigDecimal((String)request.getParameter("txt_montoPrecioMercado1")));
				alternativa.setAlterMontops(new BigDecimal((String)request.getParameter("txt_montoPrecioSocial1")));
				alternativa.setAlterVan(new BigDecimal((String)request.getParameter("txt_costoBeneficioVan1")));
				alternativa.setAlterTir(new BigDecimal((String)request.getParameter("txt_costoBeneficioTir1")));
				alternativa.setAlterCof(new BigDecimal((String)request.getParameter("txt_costoEfectRatio1")));
				alternativa.setAlterIndCof((String)request.getParameter("txt_costoEfectIndicador1"));
				alternativaService.insertar(alternativa);
				
				alternativa = new Alternativa();
				alternativa.setProyecto(new BigDecimal(request.getParameter("idProyecto")));
				alternativa.setVersion(new BigDecimal(request.getParameter("version")));
				alternativa.setNumAlter(Parametros.ALTERNATIVA_2);
				alternativa.setAlterDesc(request.getParameter("ta_descripAlternativa2"));			
				alternativa.setAlterMontopm(new BigDecimal((String)request.getParameter("txt_montoPrecioMercado2")));
				alternativa.setAlterMontops(new BigDecimal((String)request.getParameter("txt_montoPrecioSocial2")));
				alternativa.setAlterVan(new BigDecimal((String)request.getParameter("txt_costoBeneficioVan2")));
				alternativa.setAlterTir(new BigDecimal((String)request.getParameter("txt_costoBeneficioTir2")));
				alternativa.setAlterCof(new BigDecimal((String)request.getParameter("txt_costoEfectRatio2")));
				alternativa.setAlterIndCof((String)request.getParameter("txt_costoEfectIndicador2"));				
				alternativaService.insertar(alternativa);
				
				alternativa = new Alternativa();
				alternativa.setProyecto(new BigDecimal(request.getParameter("idProyecto")));
				alternativa.setVersion(new BigDecimal(request.getParameter("version")));		
				alternativa.setNumAlter(Parametros.ALTERNATIVA_3);
				alternativa.setAlterDesc(request.getParameter("ta_descripAlternativa3"));			
				alternativa.setAlterMontopm(new BigDecimal((String)request.getParameter("txt_montoPrecioMercado3")));
				alternativa.setAlterMontops(new BigDecimal((String)request.getParameter("txt_montoPrecioSocial3")));
				alternativa.setAlterVan(new BigDecimal((String)request.getParameter("txt_costoBeneficioVan3")));
				alternativa.setAlterTir(new BigDecimal((String)request.getParameter("txt_costoBeneficioTir3")));
				alternativa.setAlterCof(new BigDecimal((String)request.getParameter("txt_costoEfectRatio3")));
				alternativa.setAlterIndCof((String)request.getParameter("txt_costoEfectIndicador3"));				
				alternativaService.insertar(alternativa);
				
				
				proyectoBanco.setProyecto(new BigDecimal((String)request.getParameter("idProyecto")));
				proyectoBanco.setVersion(new BigDecimal((String)request.getParameter("version")));
				proyectoBanco.setSostenibilidad(request.getParameter("ta_sostenibilidadProyecto"));
				proyectoBancoService.actualizar(proyectoBanco);
				
				viewName = "frmAlternativasSnip03";			
		
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new ModelAndView(viewName,"estudiosSnip03Map",alternativasSnip03Map);
	}
	
	
	
	
	@RequestMapping("/alternativaSnip04Listar")
	public ModelAndView alternativaSnip04Listar(HttpServletRequest request, HttpServletResponse response) {
		
		
		if (log.isDebugEnabled()) log.debug("alternativaSnip04Listar(HttpServletRequest,HttpServletResponse");
	    HttpSession session = request.getSession();	
		Map<String, Object> alternativasSnip04Map = new HashMap<String, Object>();
		alternativa = new Alternativa();
		
	    String viewName = "";
		try{
			
			if(session.getAttribute("proyecto") == null || session.getAttribute("proyecto") == ""){
				viewName = "errorPage";
			}else{
				alternativasSnip04Map.put("proyecto", session.getAttribute("proyecto"));
				alternativasSnip04Map.put("version", session.getAttribute("version"));
						
				viewName = "frmAlternativasSnip04";			
			}
			
			
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		//return new ModelAndView(viewName,"alternativasSnip04Map",alternativasSnip04Map);
		return new ModelAndView("frmAlternativasSnip04","alternativasSnip04Map",alternativasSnip04Map);		
	}	
	

	@RequestMapping("/alternativaSnip04Grabar")
	public ModelAndView alternativaSnip04Grabar(HttpServletRequest request, HttpServletResponse response) {
		
		if (log.isDebugEnabled()) log.debug("alternativaSnip04Grabar(HttpServletRequest,HttpServletResponse");
	    HttpSession session = request.getSession();	
		Map<String, Object> alternativasSnip04Map = new HashMap<String, Object>();
		
		proyectoBanco = new ProyectoBanco();
	    
		String viewName = "";
	       
		try{	
			
			if(session.getAttribute("proyecto") == null || session.getAttribute("proyecto") == ""){
				viewName = "errorPage";
			}else{
				alternativasSnip04Map.put("proyecto", session.getAttribute("proyecto"));
				alternativasSnip04Map.put("version", session.getAttribute("version"));
				
				proyectoBanco.setProyecto(new BigDecimal((String)request.getParameter("hd_proyecto")));
				proyectoBanco.setVersion(new BigDecimal((String)request.getParameter("hd_version")));
				proyectoBancoService.actualizar(proyectoBanco);
				
				viewName = "frmAlternativasSnip04";			
			}
		
		} catch (ServiceException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return new ModelAndView("frmAlternativasSnip04","alternativasSnip04Map",alternativasSnip04Map);
		//return new ModelAndView(viewName,"estudiosSnip03Map",alternativasSnip04Map);		
	}	
	
	
}

